import { getSetting, chooseAddress, openSetting,showModal,showToast} from "../../utils/asyncWx.js";
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({
  /* 
1 获取用户的收货地址
  1 绑定点击事件
  2 调用小程序内置 api  获取用户的收货地址  wx.chooseAddress

  2 获取 用户 对小程序 所授予 获取地址的  权限 状态 scope
    1 假设 用户 点击获取收货地址的提示框 确定  authSetting scope.address 
      scope 值 true 直接调用 获取收货地址
    2 假设 用户 从来没有调用过 收货地址的api 
      scope undefined 直接调用 获取收货地址
    3 假设 用户 点击获取收货地址的提示框 取消   
      scope 值 false 
      1 诱导用户 自己 打开 授权设置页面(wx.openSetting) 当用户重新给与 获取地址权限的时候 
      2 获取收货地址
    4 把获取到的收货地址 存入到 本地存储中 
    */
  data: {
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },
  onShow:function(){
    let address = wx.getStorageSync('address');
    let cart = wx.getStorageSync('cart')||[];
    this.setData({address});
    this.setCart(cart);
  },
  onLoad: function (options) {
  
  },
  //获取收获地址
  async handlechooseAddress(){
    // //1.获取权限状态
    // wx.getSetting({
    //   success: (result) => {
    //     //获取权限状态
    //     const scopeAddress = result.authSetting["scope.address"];
    //     if(scopeAddress===true||scopeAddress===undefined){
    //       wx.chooseAddress({
    //         success: (result1) => {
    //           console.log(result1)
    //         }
    //       });  
    //     }else{
    //       //用户以前拒绝过授权 ，先让用户打开授权页面
    //       wx.openSetting({
    //         success: (result2) => {
    //           // 打开收货地址
    //           wx.chooseAddress({
    //             success: (result3) => {
    //               console.log(result3)
    //             }
    //           });      
    //         }
    //       });
            
    //     }
    //   }
    // });

    try {
          //1.获取权限状态
     const res1 = await getSetting();
     const scopeAddress = res1.authSetting["scope.address"];
     if(scopeAddress===false){
       //用户以前拒绝过授权 ，先让用户打开授权页面
       await openSetting();
     }
     const address = await chooseAddress();
     address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
     wx.setStorageSync('address', address);   
    } catch (err) {
      console.log(err)    
    }
  },
  //复选框状态发生变化
  changeCheckox(e){
    let {cart} = this.data;
    let {id} = e.currentTarget.dataset;
    const index = cart.findIndex(v=>v.goods_id==id);
    cart[index].checked=!cart[index].checked;
    this.setCart(cart);
  },
  //全选复选框发生变化
  changeAllCheckbox(){
    let {cart,allChecked} = this.data;
    allChecked =!allChecked;
    //console.log(allChecked)
    cart.forEach(v=>v.checked = allChecked);
    this.setCart(cart);
  },
 // 商品数量点击实现加减
  async handleChangeNum(e){
    let {operation,id} = e.currentTarget.dataset;
    let {cart} = this.data;
    const index = cart.findIndex(v=>v.goods_id==id);
    //如果当前商品数量为1并且要执行减的曹锁，弹出一个对话框
    if(cart[index].num===1&&operation===-1){
      // wx.showModal({
      //   title: '提示',
      //   content: '你确定要删除？',
      //   success :(res) =>{
      //     if (res.confirm) {
      //       cart.splice(index,1);
      //       this.setCart(cart);
      //     } else if (res.cancel) {
      //       console.log('用户点击取消')
      //     }
      //   }
      // }) 
      const res = await showModal({content:'你确定要删除吗？'}) 
      if (res.confirm) {
          cart.splice(index,1);
          this.setCart(cart);
      }   
    }else{
          cart[index].num+=operation;
          this.setCart(cart);
    }

 },
 //实现结算跳转到支付页面
 async handlePay(){
   let {address,totalNum} = this.data;
   //如果没有收货地址
   if(!address.userName){
    await showToast({title:'你还没有选择收货地址'})
     return;
   }
   //如果没有选中商品
   if(totalNum===0){
     await showToast({title:'你还没有选种商品'});
     return ;
   }
   //跳转到支付页面
   wx.navigateTo({
     url: '/pages/pay/index'
   });
     
 },
  //计算购物车的数据
  setCart(cart){
     //计算全选， every数组方法会遍历一个回调函数，那么每一个回调函数都返回true,every方法的返回结果就是true
    //只要有一个回调函数返回了false，就不再执行
    //空数组也会返回一个false
    let allChecked = true;
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v=>{
      if(v.checked){
        totalPrice += v.num*v.goods_price;
        totalNum += v.num;
      }else{
        allChecked = false
      }
    })
   allChecked = cart.length===0?false:allChecked;
    this.setData({
      cart,
      allChecked,
      totalNum,
      totalPrice
    })
    wx.setStorageSync('cart',cart);
  }
})